perm filename RMOT.F4[SCR,MUS] blob sn#375409 filedate 1979-04-06 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002
C00006 ENDMK
C⊗;

C≡≡≡≡≡≡ THIS IS THE REQUIRED HEADER FOR 'SCORE' SUBROUTINES. ≡≡≡≡≡≡≡
	SUBROUTINE SUBR
	COMMON /P/P(1) /PL/PL(1) /INS/ INST(27),BG(60)
	COMMON INUM,IPAR,CNT(27),BT,IREST,DF,DUR(27)
C   INUM=INST#  IPAR=PARAM#  
C   BT=BASIC TIME P1 WHEN SUBROUTINE IS CALLED
C   IF IREST IS <0, THAT NOTE WILL BE A REST.  
C   INST=INST. NAME,  BG=INSTS' BEGIN TIMES.
C   NOTE #S IN SUBROUTINE: (1-84)  C4=37  FS4=43  C5=49  ETC.
C   F1=86  F15=100 (NO F16!)
 
	DIMENSION W(100),X(100),Y(100),Z(100),T(6),
	1 A(100),B(100),C(100),D(100)
	DATA T/4.,-7.,12.,-18.,0,-10./

	IF(CNT(1).NE.1)GO TO 1
	DO 100 K=1,100
C ZERO ALL ARRAYS
	W(K)=0
	X(K)=0
	Y(K)=0
	Z(K)=0
	A(K)=0
	B(K)=0
	C(K)=0
100	D(K)=0
	K8=0
	K7=0
	K6=0
	K5=0
	K4=0
	K3=0
	K2=0
	K1=0
	J=0
	K=0
C K IS COUNTER FOR MOTIVES. J IS MEMORY OF MOTIVE NUMBER (LATER).
C 1ST STEP OF INITIALIZATION NOW COMPLETE.

1	IF(INUM.NE.1)GO TO 2
C RHYTHMS ARE STORED IN ARRAYS A,B,C,D; NOTES IN W,X,Y,Z.
	K8=K8+1
	K7=K7+1
	K6=K6+1
	K5=K5+1
	K4=K4+1
	K3=K3+1
	K2=K2+1
	K1=K1+1
C THE VARIOUS MOTIVES ARE SET FROM IPAR BACKWARDS
	Z(K8)=P(IPAR)
	Y(K7)=P(IPAR-1)
	X(K6)=P(IPAR-2)
	W(K5)=P(IPAR-3)
	D(K4)=P(IPAR-4)
	C(K3)=P(IPAR-5)
	B(K2)=P(IPAR-6)
	A(K1)=P(IPAR-7)
	RETURN
C NOW ALL INITIALIZATION DONE.
 
2	IF(IPAR.EQ.3)GO TO 30
	IF(K.NE.0)GO TO 3
20	I=P(2)
C PICK A  MOTIVE  (A NUMBER FROM 1 THROUGH 4)
	SPEED=RAND(0.2,1.0)
C GETS A TEMPO FACTOR
	IF(I.NE.J)GO TO 4
	I=I+1
	IF(I.GT.4)I=1
C ABOVE GUARDS AGAINST REPEATING PREVIOUS MOTIVE.
4	K=1+100*(I-1)
	KK=K
	J=I
C REMEMBER WHAT LAST 'I' WAS - SAVE IT IN 'J'.
3	Q=A(K)
	IF(Q.EQ.0)GO TO 20
C ZERO RHYTHM MEANS END OF MOTIVE.
	P(2)=Q*SPEED
C THIS IS FOR TEMPO CHANGES. ORIGINAL P2=1"*TEMPO FACTOR.
	RETURN
30	L=P(3)
	IF(K.NE.KK)GO TO 31
	TR=T(L)
C SET UP TRANSPOSITION
	RINV=RAND(-1.0,1.0)
C 50-50 CHANCE OF INVERSION 
	IF(RINV.GE.0)GO TO 31
	IF(TR.LT.-10.0.OR.TR.GT.10.0)TR=TR/2.
	RV=2*(W(K)+TR)
C REMEMBER 1ST NOTE NUM.
31	P(3)=W(K)+TR   
	IF(RINV.LT.0)P(3)=RV-P(3)
	PL(3)=2
C ABOVE SO IT WILL PRINT NAMES OF NOTES.
	K=K+1
	RETURN
	END